const fs = require('fs')
const express = require('express')
const md5 = require('blueimp-md5')
let User = require('./models/user')
let Card = require('./models/card')
let router = express.Router()

router
    // 学号表单验证
    .post('/schoolNum/', (req, res) => {
        const schoolNum = req.body.schoolNum
        if (schoolNum.length !== 10 || /[^0-9]/.test(schoolNum)) {
            res.status(200).json({
                err_code: 1,
                message:'非官方学号,请重输'
            })
        } else {
            res.status(200).json({
                err_code: 0,
                message: '填写正确'
            })
        }
    })
    // 用户名表单验证
    .post('/userName/', (req, res) => {
        const userName = req.body.userName
        if (!(userName.length<=5&&userName.length>=2)) {
            res.status(200).json({
                err_code: 1,
                message:'应为2~5位'
            })
        }else {
            res.status(200).json({
                err_code: 0,
                message: '填写正确'
            })
        }
    })
    // 密码表单验证
    .post('/password/', (req, res) => {
        const password = req.body.password
        if (!(password.length >= 5 && password.length <= 10)) {
            return res.status(200).json({
                err_code: 1,
                message:'应为5~10位'
            })
        }
        if (!(/^[a-z0-9]{5,10}$/.test(password))) {
            return res.status(200).json({
                err_code: 1,
                message:'小写字母与数字组成'
            })
        }
        res.status(200).json({
            err_code: 0,
            message:'填写正确'
        })
    })
    // 注册请求处理
    .post('/register/', function (req, res) {
        const body = req.body
        const userName = body.userName
        const schoolNum = body.schoolNum
        // 注册时查重:如果schoolNum有错就send,无错再去找userName=>嵌套
        User.find({
            schoolNum: schoolNum
        }, function (err, data) {
            if (err) {
                return res.status(500).json({
                    err_code: 500,
                    message: '服务器繁忙,请稍后再试'
                })
            }
            if (data.length>0) {
                return res.status(200).json({
                    err_code: 1,
                    message: '学号已存在',
                    // 传递一个数字,代表schoolNum存在
                    err_index: 0
                })
            }
            User.find({
                userName: userName
            }, function (err, data) {
                if (err) {
                    return res.status(500).json({
                        err_code: 500,
                        message: '服务器繁忙,请稍后再试'
                    })
                }
                if (data.length>0) {
                    return res.status(200).json({
                        err_code: 1,
                        message: '用户名已存在',
                        // 传递一个数字,代表userName存在
                        err_index: 1
                    })
                }
                // 若前面都没有return,则加密密码然后写入数据库
                body.password = md5(md5(body.password))
                new User(body).save((err) => {
                    if (err) {
                        return res.status(500).json({
                            err_code: 500,
                            message:'服务器繁忙,请稍后再试'
                        })
                    }
                    res.status(200).json({
                        err_code: 0,
                        message: '注册成功,将自动登录',
                        fake_token: {
                            schoolNum: body.schoolNum,
                            userName: body.userName
                        }
                    })
                }) 
            })
        })
    })
    // 登录请求处理
    .post('/login/', (req, res) => {
        const body = req.body
        User.findOne({
            schoolNum: body.schoolNum
        }, (err, data) => {
            if (err) {
                return res.status(500).json({
                    err_code: 500,
                    message:'服务器繁忙,请稍后再试'
                })
            }
            if (data === null) {
                return res.status(200).json({
                    err_code: 2,
                    message: '用户信息不存在,请先注册'
                })
            } 
            // 若存在:
            if (!(body.userName === data.userName)) {
                return res.status(200).json({
                    err_code: 1,
                    message: '用户名错误',
                    err_index: 1
                })
            } else {
                body.password = md5(md5(body.password))
                if (!(body.password === data.password)) {
                    return res.status(200).json({
                        err_code: 1,
                        message: '密码错误',
                        err_index: 2
                    })
                } else {
                    res.status(200).json({
                        err_code: 0,
                        message: '登录成功',
                        fake_token: {
                            schoolNum: body.schoolNum,
                            userName: body.userName
                        }
                    })
                }
            }
        })
    })
    // 添加表白卡处理: 
    .post('/addCard/', (req, res) => {
        const reqBody = req.body
        const body = {
            yourName: reqBody.addForm.yourName,
            yourSex: reqBody.addForm.yourSex,
            anotherName: reqBody.addForm.anotherName,
            anotherSex: reqBody.addForm.anotherSex,
            place: reqBody.addForm.place,
            info: reqBody.addForm.info,
            trueTime: reqBody.addForm.trueTime,
            color: reqBody.addForm.color,
            praises: '0',
            comments: '0'
        }
        new Card(body).save((err)=>{
            if (err) {
                return res.status(500).json({
                    err_code: 500,
                    message:'服务器繁忙,请稍后再试'
                })
            }
            res.status(200).json({
                err_code: 0,
                message: '发布成功,可以通过搜索查找自己的表白卡哦',
            })
        }) 
    })
    // 请求表白卡数据的处理:
    .get('/getCardList/', (req, res) => {
        Card.find((err, data) => {
            if (err) {
                return res.status(500).json({
                    err_code: 500,
                    message:'服务器繁忙,请稍后再试'
                })
            }
            res.status(200).json({
                err_code: 0,
                message: '获取成功',
                addCardList: data
            })
        })
    })
    // 获取当前卡片详情处理
    .get('/getCard', (req, res) => {
        const id = req.query.id
        Card.find({
            _id: id
        }, function (err, data) {
            if (err) {
                return res.status(500).json({
                    err_code: 500,
                    message: '服务器繁忙,请稍后再试'
                })
            }
            // 把评论倒序
            data[0].commentList = data[0].commentList.reverse()
            res.status(200).json({
                err_code: 0,
                message: '获取卡片详情成功',
                card: data
            })
        })
    })
    // 点赞处理
    .post('/addPraise', (req, res) => {
        const id = req.body.id
        const praises = req.body.praises
        Card.updateOne(
            { _id: id },
            {
                praises: praises+1
            },
            (err, data) => {
                if (err) {
                    console.log(err.message)
                    return res.status(500).json({
                        err_code: 500,
                        message:'服务器繁忙,请稍后再试'
                    })
                } 
                res.status(200).json({
                    err_code: 0,
                    message: '点赞成功'
                })
            }
        )
    })
    // 提交评论处理
    .post('/addComment', (req, res) => {
        const id = req.body.id
        const commentList = req.body.commentList
        Card.updateOne(
            { _id: id },
            {
                commentList: commentList,
                comments: commentList.length
            },
            (err, data) => {
                if (err) {
                    console.log(err.message)
                    return res.status(500).json({
                        err_code: 500,
                        message:'服务器繁忙,请稍后再试'
                    })
                } 
                res.status(200).json({
                    err_code: 0,
                    message: '评论成功'
                })
            }
        )
    })

// 3.**返回路由容器:
module.exports = router;
